-
Notifications
You must be signed in to change notification settings - Fork 3.4k
chore: optimize turborepo #8286
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughUpdates CI workflows to newer Actions versions and add pip/pnpm/Turbo caching; restructures web CI into parallel check/build jobs; integrates eslint-plugin-turbo; migrates packages/shared-state to ESM with tsdown build; and significantly reorganizes turborepo task graph, env, and inputs/outputs. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant PR as Pull Request
participant GH as GitHub Actions
participant Checkout as Checkout (actions/checkout)
participant Setup as Setup (node/python)
participant Cache as Cache (pnpm/pip/.turbo)
participant Build as Build job (pnpm/turbo)
participant Artifact as Artifacts store
participant Check as Check jobs (lint/types/format)
PR->>GH: triggers workflows
GH->>Checkout: checkout repo (v6)
Checkout->>Setup: setup runtime (node/python v6)
Setup->>Cache: restore pnpm/pip/.turbo caches
Setup->>Build: start build job
Build->>Cache: save/update .turbo & pnpm caches
Build->>Artifact: upload build artifacts
Artifact->>Check: download artifacts (matrix jobs)
Check->>Cache: restore caches if needed
Check->>Check: run lint / types / format checks
Check->>GH: report results
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
packages/shared-state/tsdown.config.ts (1)
1-8: LGTM!The tsdown configuration is well-structured, specifying ESM output with TypeScript declarations and platform-neutral targeting. This aligns with the package.json migration to dist-based ESM distribution.
The catalog specifies tsdown 0.16.0. Note that tsdown 0.17.0 is available; consider updating to the latest version for any improvements or fixes.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (7)
.github/workflows/pull-request-build-lint-api.yml(1 hunks).github/workflows/pull-request-build-lint-web-apps.yml(1 hunks)eslint.config.mjs(2 hunks)package.json(1 hunks)packages/shared-state/package.json(2 hunks)packages/shared-state/tsdown.config.ts(1 hunks)turbo.json(1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{ts,tsx,mts,cts}
📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
**/*.{ts,tsx,mts,cts}: Useconsttype parameters for more precise literal inference in TypeScript 5.0+
Use thesatisfiesoperator to validate types without widening them
Leverage inferred type predicates to reduce the need for explicitisreturn types in filter/check functions
UseNoInfer<T>utility to block inference for specific type arguments when they should be determined by other arguments
Utilize narrowing inswitch(true)blocks for control flow analysis (TypeScript 5.3+)
Rely on narrowing from direct boolean comparisons for type guards
Trust preserved narrowing in closures when variables aren't modified after the check (TypeScript 5.4+)
Use constant indices to narrow object/array properties (TypeScript 5.5+)
Use standard ECMAScript decorators (Stage 3) instead of legacyexperimentalDecorators
Useusingdeclarations for explicit resource management with Disposable pattern instead of manual cleanup (TypeScript 5.2+)
Usewith { type: "json" }for import attributes; avoid deprecatedassertsyntax (TypeScript 5.3/5.8+)
Useimport typeexplicitly when importing types to ensure they are erased during compilation, respectingverbatimModuleSyntaxflag
Use.ts,.mts,.ctsextensions inimport typestatements (TypeScript 5.2+)
Useimport type { Type } from "mod" with { "resolution-mode": "import" }for specific module resolution contexts (TypeScript 5.3+)
Use new iterator methods (map, filter, etc.) if targeting modern environments (TypeScript 5.6+)
Utilize newSetmethods likeunion,intersection, etc., when available (TypeScript 5.5+)
UseObject.groupBy/Map.groupBystandard methods for grouping instead of external libraries (TypeScript 5.4+)
UsePromise.withResolvers()for creating promises with exposed resolve/reject functions (TypeScript 5.7+)
Use copying array methods (toSorted,toSpliced,with) for immutable array operations (TypeScript 5.2+)
Avoid accessing instance fields viasuperin classes (TypeScript 5....
Files:
packages/shared-state/tsdown.config.ts
**/*.{js,mjs,cjs}
📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)
Use
@importtags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)
Files:
eslint.config.mjs
{turbo.json,**/*.sh}
📄 CodeRabbit inference engine (.github/instructions/bash.instructions.md)
Use Turbo for build system orchestration with configuration in turbo.json
Files:
turbo.json
🧠 Learnings (5)
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)
Applied to files:
packages/shared-state/tsdown.config.tseslint.config.mjs
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
Applied to files:
.github/workflows/pull-request-build-lint-web-apps.ymlpackage.jsoneslint.config.mjsturbo.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{js,mjs,cjs} : Use `import` tags in JSDoc for cleaner type imports in JavaScript files when working in a mixed codebase (TypeScript 5.5+)
Applied to files:
eslint.config.mjs
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `import type { Type } from "mod" with { "resolution-mode": "import" }` for specific module resolution contexts (TypeScript 5.3+)
Applied to files:
packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)
Applied to files:
packages/shared-state/package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: CodeQL analysis (javascript-typescript)
- GitHub Check: Agent
- GitHub Check: Build and lint web apps
- GitHub Check: Analyze (javascript)
🔇 Additional comments (15)
package.json (1)
38-38: LGTM!The addition of
eslint-plugin-turboversion 2.6.3 aligns with the turbo version and is properly integrated ineslint.config.mjs.eslint.config.mjs (1)
13-13: LGTM!The integration of
eslint-plugin-turbois correctly implemented using the flat config pattern and aligns with the devDependency added in package.json.Also applies to: 46-46
packages/shared-state/package.json (2)
19-20: LGTM!The build and dev scripts using tsdown are properly configured and align with the tsdown.config.ts file. The devDependency is correctly added.
Also applies to: 42-42
7-17: Approve ESM migration with exports map.All 24 imports of
@plane/shared-stateacross the codebase (in store, hooks, and components) are properly handled by the new exports configuration. The migration from src/ to dist/ outputs is transparent to consumers—both type-only imports and concrete imports likeWorkItemFilterStoreresolve correctly through the exports map.turbo.json (5)
4-38: LGTM!The expanded
globalEnvlist comprehensively covers environment variables that should invalidate Turbo's cache, including Vite, Sentry, and PostHog configuration. This ensures builds are correctly invalidated when configuration changes.
39-41: Remote caching is explicitly disabled.The
remoteCacheis set tofalse. This is appropriate for repositories without remote cache infrastructure but means CI runs won't share cache across machines or runs.
43-68: LGTM on task definitions and inputs/outputs.The task definitions are well-structured:
buildcorrectly includes.env*files in inputs and adds.react-router/**to outputscheckfamily tasks properly depend on^buildand exclude markdown files from linting/type-checking- Empty outputs for check tasks correctly indicate no build artifacts are produced
69-89: LGTM on cache settings for side-effect tasks.The
fixtasks andcleantask correctly disable caching since they perform side effects (modifying files). Thedevtask appropriately usespersistent: truefor long-running development servers.
2-2: Schema URL is correct and canonical.The schema URL
https://turborepo.com/schema.jsonis the current canonical Turborepo schema location. The update fromturbo.buildtoturborepo.comis correct..github/workflows/pull-request-build-lint-web-apps.yml (4)
30-30: LGTM on memory allocation increase.Setting
NODE_OPTIONS: "--max-old-space-size=4096"allocates 4GB heap for Node.js, which helps prevent out-of-memory errors during builds in monorepo environments.
44-62: LGTM on caching strategy.The caching implementation is well-structured:
- Pnpm store caching with proper dependency tracking via
pnpm-lock.yaml- Turbo cache persistence using
.turbodirectory- Appropriate cache keys and restore fallbacks
This significantly improves CI performance by avoiding redundant package downloads and build operations.
64-68: LGTM on consolidated Turbo command.The single command
pnpm turbo run build check:lint check:format check:types --affectedefficiently replaces multiple separate steps. This leverages Turbo's task orchestration and aligns with the task definitions inturbo.json.
33-33: Bothactions/checkout@v6andactions/setup-node@v6are available and stable. The v6 releases exist with multiple patch versions (checkout: v6.0.0, v6.0.1; setup-node: v6.0.0, v6.1.0), and both have major version tags pointing to their latest v6 releases..github/workflows/pull-request-build-lint-api.yml (2)
32-36: Upgrade toactions/setup-python@v6is stable and pip caching improves CI performance.The workflow update to v6.1.0 (latest release as of November 2025) and addition of pip caching with
cache-dependency-pathis approved. The configuration correctly targets the API requirements file for caching.
30-30: No action required.actions/checkout@v6is released and stable. The latest release is v6.0.1, with v6.0.0 also available. The v6 tag in GitHub Actions points to a stable release and is safe to use in workflows.
a24aae7 to
171b8c9
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR optimizes the Turborepo configuration and CI/CD pipeline to improve build performance and maintainability. The changes include upgrading GitHub Actions, introducing better caching strategies, adding the eslint-plugin-turbo for monorepo-specific linting, and converting the @plane/shared-state package to use tsdown for building.
Key changes:
- Restructured GitHub Actions workflow from a single job to three parallel/sequential jobs (format check, build, and matrix-based lint/type checks)
- Added eslint-plugin-turbo integration for consolidated linting
- Converted
@plane/shared-stateto use tsdown build tooling with proper ESM module exports
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| turbo.json | Updated schema URL, reorganized globalEnv alphabetically, added new environment variables, refined task configurations with better input/output definitions, and removed pnpm lock files from globalDependencies |
| pnpm-lock.yaml | Added [email protected], [email protected], and [email protected] dependencies; updated caniuse-lite version |
| packages/shared-state/tsdown.config.ts | Added tsdown build configuration for ESM format with type declarations |
| packages/shared-state/package.json | Converted to ESM module with proper exports field, added build/dev scripts using tsdown, updated entry points to dist outputs |
| package.json | Added [email protected] to devDependencies |
| eslint.config.mjs | Integrated turbo plugin flat config for monorepo-specific linting rules |
| .github/workflows/pull-request-build-lint-web-apps.yml | Split workflow into three jobs (check-format, build, check), upgraded actions to v6, added comprehensive caching strategy with pnpm store and build artifacts, increased Node.js memory allocation |
| .github/workflows/pull-request-build-lint-api.yml | Upgraded actions/checkout to v6, upgraded actions/setup-python to v6, added pip caching |
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (1)
.github/workflows/pull-request-build-lint-web-apps.yml (1)
32-36: fetch-depth: 50 may not be sufficient for affected detection over time.Using fetch-depth: 50 assumes the PR base is within the last 50 commits. For longer-lived branches or slow review cycles, this could miss affected packages. Consider either:
- Increasing fetch-depth to a safer value (100-200)
- Using fetch-depth: 0 (full history) if performance is acceptable
- Adding a comment documenting the limitation
Consider updating to a more resilient fetch depth:
- fetch-depth: 50 + fetch-depth: 0Or document the limitation if fetch-depth: 50 is intentional for performance reasons.
Also applies to: 76-79, 139-142
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (7)
.github/workflows/pull-request-build-lint-api.yml(1 hunks).github/workflows/pull-request-build-lint-web-apps.yml(2 hunks)eslint.config.mjs(2 hunks)package.json(1 hunks)packages/shared-state/package.json(2 hunks)packages/shared-state/tsdown.config.ts(1 hunks)turbo.json(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- eslint.config.mjs
- package.json
- packages/shared-state/tsdown.config.ts
🧰 Additional context used
📓 Path-based instructions (1)
{turbo.json,**/*.sh}
📄 CodeRabbit inference engine (.github/instructions/bash.instructions.md)
Use Turbo for build system orchestration with configuration in turbo.json
Files:
turbo.json
🧠 Learnings (5)
📓 Common learnings
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
Applied to files:
.github/workflows/pull-request-build-lint-web-apps.ymlturbo.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)
Applied to files:
packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `import type { Type } from "mod" with { "resolution-mode": "import" }` for specific module resolution contexts (TypeScript 5.3+)
Applied to files:
packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)
Applied to files:
packages/shared-state/package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Agent
- GitHub Check: CodeQL analysis (javascript-typescript)
- GitHub Check: Build packages
- GitHub Check: Analyze (javascript)
🔇 Additional comments (11)
.github/workflows/pull-request-build-lint-api.yml (2)
35-36: Python caching aligns with optimization objectives.The addition of Python package caching (
cache: 'pip'withcache-dependency-path) is a straightforward performance win and aligns well with the PR's broader caching strategy across the monorepo. The dependency path correctly points to the API requirements file.
30-30: Caching configuration is correctly formatted for setup-python v6.The upgrade from
actions/checkout@v4to v6 andactions/setup-python@v5to v6 introduces Python dependency caching, which aligns with the PR's performance optimization goals. The cache configuration syntax (cache: 'pip'withcache-dependency-path: 'apps/api/requirements.txt') is valid for setup-python v6.Note: checkout v6 changes how credentials are persisted (from
.git/configto$RUNNER_TEMP), but this is transparent to standard git operations and should not affect this linting workflow.turbo.json (5)
2-2: Schema URL update is correct.The URL change from turbo.build/schema.json to turborepo.com/schema.json aligns with the official Turborepo domain migration. No action needed.
39-41: Disabling remote cache is appropriate for this workflow.Setting
remoteCache: { enabled: false }disables Turborepo Cloud caching, which is fine for local development and PR workflows. If remote caching is needed later, this can be re-enabled.
52-68: New check/fix task structure is well-organized.The introduction of composite tasks (check depending on check:format/check:lint/check:types, fix depending on fix:format/fix:lint) is clean and mirrors modern CLI conventions. The dependencies are correct:
- check:format has no deps (format is independent)
- check:lint and check:types both depend on ^build (required for artifacts)
- Inputs exclude markdown files for lint/types (appropriate to avoid spurious failures)
72-76: Verify "dev" task configuration handles persistent tasks correctly.The "dev" task has
persistent: truewithcache: falseanddependsOn: ["^build"], which is appropriate for long-running development servers. Ensure:
- CI workflows don't accidentally invoke "dev" (which would hang)
- The persistent flag works as expected in the configured Turbo version
43-46: Build task inputs and outputs align with CI caching strategy.The build task specifies:
- inputs: ["$TURBO_DEFAULT$", ".env*"] — includes environment files in cache key
- outputs: ["dist/", "build/", ".react-router/**"] — covers all monorepo build artifacts
Configuration is sound and follows Turbo best practices for build orchestration.
packages/shared-state/package.json (2)
7-17: ESM migration with correct export structure looks good.The "type": "module" declaration, dist-based main/types, and modern conditional exports are all correctly configured. The package.json export for metadata access is a nice addition. The tsdown configuration properly compiles src/index.ts to ESM format (dist/index.js) with generated TypeScript definitions, and no consumers are importing directly from src/, so the migration is clean.
19-20: No action required.tsdown (version 0.16.0) is properly declared in the pnpm catalog within
pnpm-workspace.yamland correctly referenced via"catalog:"syntax inpackages/shared-state/package.jsonat line 42. The build scripts at lines 19-20 are standard configuration. tsdown is an actively maintained, modern TypeScript bundler built on Rolldown and Oxc, specifically designed for fast builds—not a performance liability.Likely an incorrect or invalid review comment.
.github/workflows/pull-request-build-lint-web-apps.yml (2)
33-33: Node.js version is already properly configured; no action needed.Node.js version is explicitly specified in
package.jsonengines field ("node": ">=22.18.0"), soactions/setup-node@v6will correctly auto-detect and use this version. GitHub Actions versions are current. No version drift risk exists.Likely an incorrect or invalid review comment.
113-122: Addapps/*/distto the artifact cache paths to capture TypeScript app outputs.The workflow caches
packages/*/distfor library outputs andapps/*/buildfor React Router app outputs, butapps/liveusestsdown(like the packages) and producesapps/live/dist. Update the cache paths to includeapps/*/distalongsideapps/*/buildandapps/*/.react-routerto ensure all build artifacts are preserved across jobs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 7 out of 8 changed files in this pull request and generated no new comments.
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
171b8c9 to
0da62a3
Compare
0da62a3 to
734b8c1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (1)
turbo.json (1)
3-3: Consider restoring pnpm-lock.yaml to globalDependencies for clarity and robustness.The workflows compensate for its removal through SHA-based cache invalidation (lines 103, 163 in pull-request-build-lint-web-apps.yml) and separate pnpm store caching with hashFiles('**/pnpm-lock.yaml'). However, this branch/commit strategy is less explicit than file-based invalidation. Adding pnpm-lock.yaml back makes the intent clearer:
"globalDependencies": [".npmrc", "pnpm-lock.yaml"]This is particularly useful for local development, where branch/commit-based cache keys don't apply. Optionally include pnpm-workspace.yaml as well.
🧹 Nitpick comments (1)
turbo.json (1)
71-89: Clarify the purpose and interaction ofdevandstarttasks; addinteractiveflag if tasks accept stdin.Both
dev(lines 71–75) andstart(lines 86–89) tasks are markedpersistent: trueandcache: false, but they differ in dependencies:devdepends on^build, whilestarthas no dependencies. This distinction is unclear.Additionally, per Turbo best practices for dev/persistent tasks, both should include
"interactive": trueif they accept stdin (e.g., if the process reads user input or allows REPL interaction).Consider:
- Documenting (in comments or README) whether
devandstartserve different purposes (e.g.,dev= full dev environment with builds;start= lightweight start).- Adding
"interactive": trueto both tasks if they accept stdin.Example:
"dev": { "cache": false, "dependsOn": ["^build"], "persistent": true, "interactive": true // if task accepts stdin }, "start": { "cache": false, "persistent": true, "interactive": true // if task accepts stdin }Please confirm whether
devandstartshould both haveinteractive: true, and clarify their intended use cases (e.g., for local development, CI, or both).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (7)
.github/workflows/pull-request-build-lint-api.yml(1 hunks).github/workflows/pull-request-build-lint-web-apps.yml(2 hunks)eslint.config.mjs(2 hunks)package.json(1 hunks)packages/shared-state/package.json(2 hunks)packages/shared-state/tsdown.config.ts(1 hunks)turbo.json(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (4)
- .github/workflows/pull-request-build-lint-api.yml
- packages/shared-state/tsdown.config.ts
- eslint.config.mjs
- package.json
🧰 Additional context used
📓 Path-based instructions (1)
{turbo.json,**/*.sh}
📄 CodeRabbit inference engine (.github/instructions/bash.instructions.md)
Use Turbo for build system orchestration with configuration in turbo.json
Files:
turbo.json
🧠 Learnings (8)
📓 Common learnings
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `with { type: "json" }` for import attributes; avoid deprecated `assert` syntax (TypeScript 5.3/5.8+)
Applied to files:
packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `import type { Type } from "mod" with { "resolution-mode": "import" }` for specific module resolution contexts (TypeScript 5.3+)
Applied to files:
packages/shared-state/package.json
📚 Learning: 2025-11-25T10:18:05.172Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/typescript.instructions.md:0-0
Timestamp: 2025-11-25T10:18:05.172Z
Learning: Applies to **/*.{ts,tsx,mts,cts} : Use `.ts`, `.mts`, `.cts` extensions in `import type` statements (TypeScript 5.2+)
Applied to files:
packages/shared-state/package.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to {turbo.json,**/*.sh} : Use Turbo for build system orchestration with configuration in turbo.json
Applied to files:
turbo.json.github/workflows/pull-request-build-lint-web-apps.yml
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-workspace.yaml : Use pnpm-workspace.yaml for monorepo workspace configuration
Applied to files:
turbo.json
📚 Learning: 2025-11-25T10:17:39.709Z
Learnt from: CR
Repo: makeplane/plane PR: 0
File: .github/instructions/bash.instructions.md:0-0
Timestamp: 2025-11-25T10:17:39.709Z
Learning: Applies to pnpm-lock.yaml : Use pnpm-lock.yaml as the lockfile for dependency management
Applied to files:
turbo.json
📚 Learning: 2025-08-29T08:45:15.953Z
Learnt from: sriramveeraghanta
Repo: makeplane/plane PR: 7672
File: pnpm-workspace.yaml:8-9
Timestamp: 2025-08-29T08:45:15.953Z
Learning: The makeplane/plane repository uses pnpm v10.12.1, which supports onlyBuiltDependencies configuration in pnpm-workspace.yaml files.
Applied to files:
turbo.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: check:format
- GitHub Check: Agent
- GitHub Check: CodeQL analysis (javascript-typescript)
- GitHub Check: Analyze (javascript)
🔇 Additional comments (6)
.github/workflows/pull-request-build-lint-web-apps.yml (2)
20-169: Workflow architecture is sound: good separation of concerns and appropriate caching strategy.The restructuring into three parallel/serial jobs (check-format, build, check) with proper dependency management and Turbo/pnpm caching aligns well with the updated turbo.json task graph. Format checks run independently in parallel, build creates Turbo artifacts, and lint/type checks depend on build outputs. The Turbo cache restore/save pattern is correct (restore-only in check job, restore+save in build job).
99-119: Turbo cache keys and restore strategy are appropriate for pull_request events.The multi-level fallback (exact match with both base.sha and current.sha → base.sha only → OS fallback) provides good cache reuse across PR updates while detecting code changes. This is a standard pattern for CI.
packages/shared-state/package.json (1)
7-17: ESM module configuration and exports field are correctly set up.The migration from direct src/ references to dist/ artifacts with proper "type": "module", main/module/types pointing to compiled outputs, and a well-formed exports field with type/import entries is correct and aligns with modern Node.js packaging standards.
turbo.json (3)
4-37: globalEnv configuration is comprehensive and includes all expected build/check variables.The global environment variables properly cover Sentry, PostHog, Vite app config, and development flags. All previously flagged unused variables (like ENABLE_EXPERIMENTAL_COREPACK) have been removed.
42-67: Task inputs and outputs are correctly configured for efficient caching.The build task properly includes
.env*files in inputs to detect environment-based build changes, and outputs cover dist/build artifacts. Check tasks appropriately exclude markdown files from inputs and have no outputs, since linting and type-checking produce no cacheable artifacts.
38-40: remoteCache is explicitly disabled, indicating local-only cache strategy.This is appropriate for self-hosted CI without a shared cache backend. If remote caching is planned for the future, consider documenting the migration path and infrastructure requirements.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 7 out of 8 changed files in this pull request and generated 1 comment.
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Type of Change
Summary by CodeRabbit
Chores
New Features
✏️ Tip: You can customize this high-level summary in your review settings.